from socket import *
import struct
import json
from msgdata import MsgData


def send_msg(ss,client):
    body = bytes(ss, 'utf-8')
    # 计算实际有效数据(body)的长度
    body_len = len(body)

    # head中存body的长度
    # I表示整型,即用一个整型大小空间存储body的长度; 而>表示按照大端存储, 至于什么是大端小端存储可以Google
    head = struct.pack('>I', body_len)
    # 按照我们自定义的协议格式,将字节数据发送到服务端
    client.sendall(head + body)


def client_init(work_code,address,address_port):
    client = socket(AF_INET, SOCK_STREAM)
    # 连接服务端
    client.connect((address, int(address_port)))
    client.setsockopt(SOL_SOCKET, SO_KEEPALIVE, 1)
    #发送join 信息
    msg = MsgData()
    msg._type = 'join'
    msg._sendId = work_code
    msg._receiptId = work_code
    print(msg.__dict__)
    # 将对象book转成JSON格式的数据
    # 将JSON格式数据转成字节类型,用于网络传输
    send_msg(json.dumps(dict(msg.__dict__)),client)
    return client
